package com.linkgie.galaxyframework.crypto.spi;

/**
 * 哈希操作；
 * 
 * @author liso
 *
 */
public interface HashFuncSPI extends CryptoFuncSPI{
	
	/**
	 * 计算哈希摘要；
	 * 
	 * @param data 要计算哈希摘要的数据；
	 * @return
	 */
	default Hashbytes hash(byte[] data) {
		return hash(data, 0, data.length);
	}

	/**
	 * 计算哈希摘要；
	 * 
	 * @param data   要计算哈希摘要的数据；
	 * @param offset
	 * @param length
	 * @return
	 */
	Hashbytes hash(byte[] data, int offset, int length);

	/**
	 * 计算哈希摘要；
	 * 
	 * @param data 要计算哈希摘要的数据；
	 * @return
	 */
	byte[] hashInRaw(byte[] data);

	/**
	 * 计算哈希摘要；
	 * 
	 * @param data   要计算哈希摘要的数据；
	 * @param offset
	 * @param length
	 * @return
	 */
	byte[] hashInRaw(byte[] data, int offset, int length);
	
	/**
	 * 计算哈希摘要；
	 * 
	 * @param data 要计算哈希摘要的数据；
	 * @return
	 */
	default byte[] hashInEncoded(byte[] data) {
		return hashInEncoded(data, 0, data.length);
	}
	
	/**
	 * 计算哈希摘要；
	 * 
	 * @param data   要计算哈希摘要的数据；
	 * @param offset
	 * @param length
	 * @return
	 */
	byte[] hashInEncoded(byte[] data, int offset, int length);

	/**
	 * 生成哈希摘要生成器；
	 * 
	 * @return
	 */
	DigestGenerator<Hashbytes> createHashDigester();
}
